package com.novatec.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.beanutils.BeanMap;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.novatec.mvc.modelo.CajasItem;

public class CajasDAO {
	
	private final Logger logger = Logger.getLogger(this.getClass());
	private SimpleJdbcTemplate simpleJdbcTemplate;
//	private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy");

	@Autowired
    public void init(DataSource dataSource) {
        this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
    }

	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public void insertarCajas(CajasItem cajasItem) throws ParseException {
		// TODO Auto-generated method stub
		
		String sql = "INSERT INTO tipocaja " +
		"(NombreTipoCaja,Descripcion,IndActivo,CantidadCajas,Precio)" +
		" VALUES (:nombrecontenedor, :descripcion, 1, :stockglobal, :precio)";
		System.out.println(sql);
		
		
		@SuppressWarnings("unchecked")
		Map<String, ?> cajasMap= new BeanMap(cajasItem);
		MapSqlParameterSource mapSQL= new MapSqlParameterSource(cajasMap);
//		mapSQL.addValue("numSecuencia", contratoItem.getNumContrato());
//		mapSQL.addValue("fechaIni", sdf.parse(contratoItem.getIniContrato()));
//		mapSQL.addValue("fechaFin", sdf.parse(contratoItem.getFinContrato()));
		simpleJdbcTemplate.update(sql, mapSQL);
	
		logger.debug("cajas insertadas");	
	}
	
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<CajasItem> validarNombreModelo(CajasItem cajasItem) throws ParseException {
		
		RowMapper<CajasItem> mapper = new RowMapper<CajasItem>() {  
	        public CajasItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	CajasItem item = new CajasItem();	        	
	        	String nombreTipoCaja = rs.getString("nombretipocaja");
	        	item.setNombrecontenedor(nombreTipoCaja);
	            return item;
	        }
	    };		
		String sql = "SELECT nombretipocaja FROM tipocaja WHERE nombretipocaja = ?";	

		List<CajasItem> lista = simpleJdbcTemplate.query(sql, mapper, cajasItem.getNombrecontenedor());
		return lista;
	}
	
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public List<CajasItem> getListaTipCajas() throws ParseException {
		RowMapper<CajasItem> mapper = new RowMapper<CajasItem>() {  
	        public CajasItem mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	CajasItem item = new CajasItem();	        	

	        	item.setIdcontenedor(rs.getLong("idtipocaja"));
	        	item.setNombrecontenedor(rs.getString("nombretipocaja"));

	            return item;
	        }
	    };

		String sql = "SELECT idtipocaja, nombretipocaja FROM tipocaja";		
		List<CajasItem> lista = simpleJdbcTemplate.query(sql, mapper);

		return lista;
	}
	

}
